home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Bavarian / Bavarian #124 (19xx)(APS Electronic).zip / Bavarian #124 (19xx)(APS Electronic).adf / Berserker / Berserker.S < prev    next >
Text File  |  1988-08-04  |  19KB  |  763 lines

  1. **************************************************************************
  2. *
  3. *                         B E R S E R K E R III +
  4. *                         -----------------------
  5. *
  6. *                 © Copyright 1988, 1989 by Ralf Thanner
  7. *
  8. * This code is entirely written in assembler for the Kuma Seka assembler
  9. *
  10. *    Executable program and source code are both in the PUBLIC-DOMAIN!
  11. *
  12. *  A small copy fee for Berserker is okay, but anything which looks like
  13. *        commercial redistribution is forbidden (remember that!).
  14. *
  15. **************************************************************************
  16. *
  17. *    REVISION HISTORY:
  18. *    =================
  19. *
  20. *    V1.0    - Just a primitive SCA finder and killer.
  21. *
  22. *    V1.c    - Added Byte Bandit & Byte Warrior killer.
  23. *        - Improved SCA & SCA mutants killer routine.
  24. *
  25. *    V2.b    - Now also finds the Exterminator (LAMER).
  26. *
  27. *    V2.d    - Now also finds the first link virus (IRQ TEAM 41).
  28. *
  29. *    V2.e    - Added alert box by Olaf Barthel.
  30. *        - Some cleanups and bug-fixes done.
  31. *
  32. *    V2.e+    - Doesn't refuse to work with Kick 1.3 any more.
  33. *        - Added custom bootblock writer.
  34. *        - Added kill cold-cool vectors;
  35. *          There are just too many SCA clones on the market
  36. *          and it is saver to clear these pointers
  37. *
  38. *    V3.0    - Now also finds the BSG 9 link virus.
  39. *        - Second (and final?) code cleanup for public
  40. *          release (YEAH!!!).
  41. *        - Removed the custom bootblock writer, too many guys
  42. *          thought Berserker to be some kind of virus in
  43. *          disguise.
  44. *
  45. *    V3.0+    - Extended to find Gaddafi and Disk-Doctor viruses.
  46. *
  47. **************************************************************************
  48. *
  49. *   This is the assembly language source code for BERSERKER III +
  50. * (Cleaned up on request from Ralf Thanner by Olaf 'Olsen' Barthel)
  51. *
  52. **************************************************************************
  53.  
  54. ;
  55. ;
  56. ;     exec.library
  57. ;
  58.  
  59. openlib = -552
  60. closelib = -414
  61. forbid = -132
  62. permit = -138
  63. findname = -276
  64.  
  65. ;
  66. ;    dos.library
  67. ;
  68.  
  69. write = -48
  70. output = -60
  71.  
  72. ;
  73. ;    intuition.library
  74. ;
  75.  
  76. dispalert = -90
  77.  
  78. ;
  79. ;
  80. ******************************************************************
  81.  
  82. powerup:
  83.     movem.l        d0-d7/a0-a6,-(a7); save registers
  84.  
  85.     bset        #1,$bfe001    ; Turns the LED off for better
  86.                     ; sound on Amiga 500 & 2000
  87.  
  88.     move.l        d0,d4        ; Stuff from CLI
  89.     move.l        a0,a4
  90.  
  91.     move.l        $04.w,a6    ; $04 is ExecBase
  92.     jsr        forbid(a6)    ; forbid it all
  93.  
  94.  
  95.     bsr        opendos        ; Opens dos.lib to get
  96.                     ; the output handle....
  97.  
  98.  
  99.     bra        regcheck    ; Tests if user wants
  100.                     ; instructions...
  101.  
  102. exit1:
  103.  
  104. *    Gadaffi search must be before SCA search, both use
  105. *    cool-capt. and SCA searches only for DoIO (also in Gadaffi)
  106.  
  107.     bsr        gad        ; Gadaffi
  108.  
  109.     bsr        disk
  110.  
  111.     bsr        sca        ; Checks for SCA & mutants
  112.  
  113.     bsr        bytebandit
  114.  
  115.     bsr        dasa        ; Checks for Byte Warrior
  116.  
  117.     bsr        irq
  118.  
  119.     bsr        bsg
  120.  
  121.     bsr        exterminator
  122.  
  123.     bsr        killcold_cool    ; Always clear the cold and
  124.                     ; the cool capture
  125.  
  126.     move.w        virusflag,d0
  127.     cmp.w        #0,d0        ; No virus found!!!!
  128.     bne.s        exit4        ; Lucky ones...
  129.     move.l        #mes1,d2
  130.     move.l        #mes1length,d3
  131.      bsr.s        writer
  132.     bra.s        exit3
  133.  
  134. exit4:    bsr.L        alert        ; Virus found
  135.  
  136. exit3:    move.l      $04.w,a6
  137.     jsr         permit(a6)    ; Allow it all
  138.     bsr        closedos
  139.     movem.l     (a7)+,d0-d7/a0-a6; regs back
  140.     moveq        #00,d0        ; For clear entry into CLI
  141.     rts                ; Back to CLI...
  142.  
  143.  
  144. *********************** sub routines *********************************
  145.  
  146. writer:
  147.     move.l        dosbase,a6    ; Throws text into the CLI
  148.     move.l        outputhandle,d1 ; window
  149.     jsr        write(a6)
  150.     rts
  151.  
  152. killcold_cool:
  153.     move.l        $04.w,a6
  154.     moveq        #0,d3
  155.     move.l        d3,46(a6)    ; cool-capture normal
  156.     move.l        d3,42(a6)    ; cold-capture normal
  157.     move.l        d3,50(a6)
  158.     lea        34(a6),a0    ; New execbase checksum
  159.     clr.w        d0
  160.     moveq        #$17,d1
  161. kcc1:    add.w        (a0)+,d0
  162.     dbf        d1,kcc1
  163.     not.w        d0
  164.     move.w        d0,(a0)
  165.     rts
  166.  
  167.  
  168. alert:     lea         IntName,a1
  169.     move.l         $04.w,a6
  170.     moveq        #00,d0        ; Version = 0
  171.     jsr         openlib(a6)
  172.     move.l         d0,IntBase    ; Buffering the IntuiBase
  173.     move.l         d0,a6
  174.     lea        alert1,a0
  175.      moveq        #00,d0        ; Recovery Alert
  176.      move.l         #28,d1
  177.      jsr         dispalert(a6)
  178.     move.l         IntBase,a1    ; Close...
  179.     move.l         $04.w,a6    ; ...Intuition
  180.     jsr         closelib(a6)
  181.     rts
  182.  
  183.  
  184. regcheck:
  185.     cmpa.w        #2,d4        ; 2 signs ( ? and <ret> ) ??
  186.     bne.s        regcheck1
  187.     move.l        (a4),d0
  188.     swap        d0
  189.     cmp.w        #$3f0a,d0    ; Yes it was the '?'
  190.     bne.s        regcheck1
  191.     move.l        #mes11,d2    ; Prints out the instructions
  192.     move.l        #mes11length,d3
  193.     bsr.L        writer
  194.     jmp        exit3
  195. regcheck1:
  196.     jmp        exit1
  197.  
  198. opendos:
  199.     move.l        $04.w,a6    ; Open's dos.library
  200.     moveq        #00,d0
  201.     lea.l        dosname,a1    ; And gets outputhandle
  202.     jsr        openlib(a6)    ; for the messages...
  203.     move.l        d0,dosbase
  204.     move.l        d0,a6
  205.     jsr        output(a6)
  206.     move.l        d0,outputhandle
  207.     rts
  208.  
  209. closedos:
  210.     move.l      $04.w,a6    ; What do you think ???
  211.     move.l      dosbase,a1
  212.     jsr         closelib(a6)
  213.     rts
  214.  
  215. ****************** V I R U S  K I L L I N G  P A R T ****************
  216.  
  217. disk:
  218.     move.l        $04.w,a6    ; Disk-Doc uses cold & cool capture
  219.     move.l        46(a6),d0
  220.     cmp.l        #0,d0        ; No other virus uses both
  221.     beq.L        dd0        ; pointers... [ hope so !!! ]
  222.     move.l        42(a6),d0
  223.     cmp.l        #0,d0
  224.     beq.L        dd0
  225.  
  226.  
  227.     move.l        42(a6),diskdoc    ; I had to add this very
  228.     move.l        diskdoc,a0    ; complicated routine because
  229.     add.l        #$c4,a0        ; Disk-Doc uses or changes:
  230.     move.l        a0,a1        ; - cool capt.
  231.     addq.l        #4,a1        ; - cold capt.
  232.     move.w        #$4e75,(a1)    ; - DoIO
  233.     jsr        (a0)        ; - 148(a6) [what's that?]
  234.     move.l        a2,diskdoc1    ; - The task of clipboard.device
  235.     addq.l        #6,a2
  236.     move.l        a2,a3        ; This routine gets the adress of
  237.     addq.l        #4,a2        ; its task routine and cuts it off
  238.     move.w        #$4e75,(a2)
  239.     jsr        (a3)
  240.     move.l        a0,diskdoc2
  241.     bsr.L        killcold_cool
  242.     move.l        $04.w,a6
  243.     move.l        #$fc06dc,-$1c6(A6); Only Kick 1.2 values, on 1.3
  244.     move.l        #$fc12fc,148(a6)  ; Disk-Doc shouldn't work...
  245.  
  246.     move.l        diskdoc,a0
  247.     move.l        a0,a1
  248.     add.l        #$1a0,a1
  249.     moveq        #0,d0
  250. dd2:    move.l        d0,(a0)+
  251.     cmpa.l        a0,a1
  252.     bge.s        dd2
  253.     move.l        diskdoc1,a2
  254.     move.w        #$4e75,(a2)
  255.  
  256.     move.l        diskdoc2,a2
  257.     move.w        #$4e75,(a2)
  258.  
  259.     move.w        #$1941,virusflag
  260.     move.l        #mes6,d2
  261.     move.l        #mes6length,d3
  262.      bsr.L        writer
  263. dd0:
  264.     rts
  265.  
  266. ********************************************************************
  267. *
  268. *    DISK-DOCTOR
  269. *
  270. *    - After each reset Disk Doctor allocates more memory
  271. *    - This was in my opinion the best one, although it could be
  272. *      better: - it uses DoIO pointer from Kick 1.2
  273. *          - you can read it in the boot (crash on 1.3)
  274. *    - it uses the clipboard task for its dirty work
  275. *    - it uses cold & cool capture to stay in memory
  276. *
  277. *    For such kind of virus Guardian or VirusX are the best killers!!
  278. *    ( Find them in the boot and fight them when they are harmless! )
  279. ************************************************************************
  280.  
  281. gad:
  282.     move.l        $04.w,a6    ; Gadaffi uses cool capture
  283.     cmp.l        #0,46(a6)    ; for its dirty work...
  284.     beq.s        gad0        ; no cool capture set
  285.  
  286.     cmp.l        #$47414441,$7fb40; Gadaffi
  287.     bne.s        gad0        ; is ALWAYS to be found at $7fb00
  288.  
  289.     move.l        -$1c6(a6),d5    ; $4b0 with 512 kb
  290.     swap        d5
  291.     cmp.w        #$fc,d5        ; $fc06dc (1.2)  $fc0718 (1.3)
  292.     beq.s        gad0
  293.  
  294.     move.l        46(a6),gadaf
  295.     bsr.L        killcold_cool    ; Clear its cool pointer
  296.     move.l        $04.w,a6
  297.     move.l        #$fc06dc,-$1c6(A6)
  298.     move.l        d0,546(a6)    ; Clear kicktagptr...
  299.     move.l        d0,550(a6)
  300.     move.l        d0,554(a6)
  301.     move.l        gadaf,a0
  302.     sub.l        #$dc,a0
  303.     move.l        a0,a1
  304.     add.l        #$400,a1
  305.     moveq        #0,d0
  306. gad2:    move.l        d0,(a0)+
  307.     cmpa.l        a0,a1
  308.     bge.s        gad2
  309.     move.w        #$1941,virusflag
  310.     move.l        #mes4,d2
  311.     move.l        #mes4length,d3
  312.      bsr.L        writer
  313. gad0:
  314.     rts
  315.  
  316. ********************************************************************
  317. *
  318. *    GADAFFI is a mutant version of Byte Warrior
  319. *
  320. *    - It changes cool capture, kicktag. and DoIO
  321. *    - It is much more stupid than Byte Warrior:
  322. *     -> you can read it in the boot...
  323. *     -> normally it crashes with Kick 1.3 because
  324. *        he uses the DoIO vector of 1.2 itself
  325. *    - After 12 resets it tries to kill your drive, or
  326. *      was it playing a drive music (I don't see any difference).
  327. *
  328. ********************************************************************
  329.  
  330. bsg:
  331.     move.l        $04.w,a6
  332.     move.l        546(a6),d0    ; BSG 9 is a resident module
  333.     adda.l        550(a6),d0    ; It is still in memory after
  334.     adda.l        554(a6),d0    ; a reset
  335.     cmp.l        #0,d0
  336.     beq.s        bsgende
  337.     move.l        550(a6),a0    ; Searching from A0
  338.     move.l        a0,a1
  339.     add.l        #$1000,a1    ; Searching to A1
  340.     move.l        #$00005454,d0    ; Searching for 'TT'
  341.     moveq        #0,d1
  342. bsg0:
  343.     move.w        (a0)+,d1
  344.     cmp.w        d1,d0
  345.     beq.s        bsg1
  346.     cmpa.l        a0,a1
  347.     bge.s        bsg0
  348.     rts                ; Nothing found !
  349.                     ; It is not always a virus which
  350.                     ; uses these pointers
  351. bsg1:
  352.     move.w        #$5631,d0
  353.     move.w        (a0),d1
  354.     cmp.w        d1,d0
  355.     bne.s        bsg0
  356.     moveq        #0,d0        ; Kills it from beginning
  357.     move.l        a0,a1        ; to 'TTV1' <- its end marker
  358.     move.l        550(a6),a0
  359. bsg2:
  360.     move.l        d0,(a0)+
  361.     cmpa.l        a0,a1
  362.     bne.s        bsg2
  363.  
  364.     move.l        d0,546(a6)    ; Clear kicktagptr...
  365.     move.l        d0,550(a6)
  366.     move.l        d0,554(a6)
  367.     move.w        #$1941,virusflag
  368.     move.l        #mes2,d2
  369.     move.l        #mes2length,d3
  370.      bsr.L        writer
  371. bsgende:
  372.     rts
  373.  
  374. *****************************************************************
  375. *
  376. *    BSG 9 is an intelligent version of a link virus
  377. *
  378. *    - It always modifies the FIRST file of the startup-
  379. *      sequence
  380. *    - The file now always is about 2608 bytes long
  381. *    - The old file in in the devs dir with
  382. *      spaces instead of a name now
  383. *    - After the fourth or fifth reset it turns the
  384. *      screen black and prints out its stupid message.
  385. *
  386. *******************************************************************
  387.  
  388. irq:    ; changes oldopen
  389.     move.l        $04.w,a6
  390.     move.l        -$196(a6),d4
  391.     swap        d4
  392.     cmp.b        #$fc,d4    ; V1.2 00fc1430  V1.3 00fc146c
  393.     beq.s        irq5
  394.     move.w        #$1942,virusflag
  395.     move.l        -$196(a6),a4
  396.     add.w        #8,a4
  397.     move.l        #$4e714e71,(a4)    ; Castrate virus
  398.     move.l        $04.w,a5
  399.     sub.l        #$196,a5    ; In this part the old
  400.     move.l        (a5),a4        ; oldopenlib call
  401.     add.l        #18,a4        ; is restored...
  402.     move.l        (a4),(a5)
  403.     move.l        #mes3,d2
  404.     move.l        #mes3length,d3
  405.     bsr.L        writer
  406. irq5:    rts
  407.  
  408. **********************************************************
  409. *
  410. *    The IRQ Team Virus was the first link virus
  411. *    on AMIGA...
  412. *
  413. *    It uses oldopenlibrary for its dirty work.
  414. *    In order to work properly with all Kickstart
  415. *    versions the IRQ-virus saves the replaced
  416. *    sytemcall in memory.
  417. *    To let my Berserker work with all kick versions
  418. *    I just grab his saved sytemcall in order to
  419. *    throw him out properly...
  420. *
  421. **********************************************************
  422.  
  423. exterminator:    ; in trddevice, doio & kicktag... ($4678, $414, $898)
  424.     move.l        $4.w,a6
  425.     lea        350(a6),a0
  426.     lea        trddevice,a1    ; Searches first
  427.     jsr        findname(a6)    ; for trackdisk.device
  428.     move.l        d0,a0
  429.     sub.l        #28,a0
  430.     move.l        a0,exter
  431.     move.l        exter,d4
  432.     swap        d4
  433.     cmp.b        #$fe,d4        ; Is the pointer normal (V1.2)
  434.     beq.L        exe4
  435.     cmp.b        #$ff,d4
  436.     beq.L        exe4        ; Is the pointer normal (V1.3)
  437.  
  438.     move.l        $04.w,a6
  439.     move.l        a6,a5
  440.     sub.w        #$262,a5    ; In A5 now Exterminator's address..
  441.     move.l        a5,exter1
  442.     move.l        (a5),d4
  443.     swap        d4
  444.     cmp.b        #$fc,d4        ; Is it the normal system call?
  445.     beq.L        exe4
  446.  
  447.     move.l        exter1,a5
  448.     move.l        (a5),a0
  449.     sub.l        #$14e,a0
  450.     move.l        a0,a1
  451.     add.l        #$400,a1
  452.     moveq        #0,d1
  453.     moveq        #0,d0
  454. exe7:
  455.     move.w        #$4c41,d0    ; We are looking for 'LAMER'
  456.     move.w        (a0)+,d1
  457.     cmp.w        d1,d0
  458.     beq.s        exe2
  459.     cmpa.l        a0,a1
  460.     bge.s        exe7
  461.     rts
  462. exe2:
  463.     move.w        #$4d45,d0
  464.     move.w        (a0),d1
  465.     cmp.w        d1,d0
  466.     bne.s        exe7
  467.     add.l        #28,a0        ; Here exteminator saves his
  468.     move.l        (a0)+,a1    ; changed system calls
  469.     move.l        (a0)+,a2
  470.  
  471.     move.w        #$1941,virusflag
  472.     moveq        #0,d0
  473.     move.l        $04.w,a6    ; Clear resident structures
  474.     move.l        d0,546(a6)
  475.     move.l        d0,550(a6)
  476.     move.l        d0,554(a6)
  477.  
  478.     move.l        exter1,a0    ; Correct both pointers
  479.     move.l        a1,(a0)
  480.     move.l        exter,a0
  481.     move.l        a2,(a0)
  482.     move.l        exter1,a5    ; Crucify it
  483.     move.l        (a5),a0
  484.     sub.l        #$14e,a0
  485.     move.l        a0,a1
  486.     add.l        #$400,a1
  487.     moveq        #0,d0
  488. exe5:    move.l        d0,(a0)+
  489.     cmpa.l        a0,a1
  490.     bge.s        exe5
  491.  
  492.     move.l        #mes9,d2
  493.     move.l        #mes9length,d3
  494.     bsr.L        writer
  495. exe4:    rts
  496.  
  497.  
  498.  
  499. sca:
  500.     move.l        $04.w,a6
  501.     move.l        46(a6),d2    ; Cold-capture
  502.     cmp.l        #0,d2
  503.     bne.s        sca1
  504.     rts
  505. sca1:
  506.     move.w        #$1941,virusflag
  507.     move.l        46(a6),a0
  508.     move.l        a0,a1
  509.     sub.l        #$3e,a0        ; We are now searching
  510.     add.l        #$400,a1    ; for jsr -456(a6) [DoIO]
  511.     moveq        #0,d1        ; if cold capture is set
  512.     moveq        #0,d0        ; and in the routine is
  513. sca2:                    ; a DoIO it is 100% a
  514.     move.w        #$4eae,d0    ; virus ( mostly mutants)
  515.     move.w        (a0)+,d1
  516.     cmp.w        d1,d0
  517.     beq.s        sca3
  518.     cmpa.l        a0,a1
  519.     bge.s        sca2
  520.     rts                ; Nothing found
  521. sca3:
  522.     move.w        #$fe38,d0
  523.     move.w        (a0),d1
  524.     cmp.w        d1,d0
  525.     bne.s        sca2
  526.     move.l        $7eff0,d2    ; Here is the direct test
  527.     cmp.l         #$53434121,d2    ; if it is SCA or AEK or LSD
  528.     beq.s        sca4        ; if it is none of them it is
  529.                     ; another mutant SCA...
  530.     cmp.l        #$4c534421,d2    ; AEK
  531.     beq.s        scamutants
  532.     cmp.l        #$41454b21,d2    ; LSD
  533.     beq.s        scamutants
  534.     bne.s        scamutants
  535. sca4:
  536.     move.l        #mes5,d2    ; SCA
  537.     move.l        #mes5length,d3
  538.      bsr.L        writer
  539.     bra.s        scakill
  540. scamutants:
  541.     move.l        #mes8,d2    ; Mutant
  542.     move.l        #mes8length,d3
  543.      bsr.L        writer
  544. scakill:
  545.     move.l        $04.w,a6
  546.     move.l        46(a6),a0
  547.     move.l        a0,a1
  548.     sub.l        #$3e,a0
  549.     add.l        #$400,a1
  550.     moveq        #0,d1        ; Kills them in memory
  551. scakill1:
  552.     move.w        d1,(a0)+
  553.     cmpa.l        a0,a1
  554.     bge.s        scakill1
  555.     bsr.L        killcold_cool    ; Repairs both vectors
  556.     rts
  557. dasa:
  558.     move.l        $04.w,a6
  559.     move.l        -$1c6(a6),d5    ; $4b0 with 512 kb
  560.     swap        d5
  561.     cmp.w        #$fc,d5        ; $fc06dc (1.2)  $fc0718 (1.3)
  562.     bne.s        dasa0
  563.     move.l        $7f804,d5    ; Dasa is ALWAYS at $7f800
  564.     cmp.l        #$64116dec,d5    ; no need to restore doio
  565.     beq.s        dasa1        ; pointer (not changed)
  566.     rts
  567. dasa0:
  568.     move.l        #$00fc06dc,-$1c6(a6)    ; Remove its pointer
  569. dasa1:    move.l        -$1c6(a6),a3
  570.     sub.l        #$16e,a3    ; Its beginning
  571.     moveq        #0,d0
  572.     move.l        d0,554(a6)    ; Kickchecksum
  573.     move.l        d0,550(a6)    ; Kicktagptr
  574.     move.l        d0,546(a6)    ; Kickmemptr
  575.     move.l        #$4ff,d1    ; Delete virus
  576. dasa2:    move.b        d0,(a3)+
  577.     dbf        d1,dasa2
  578.     move.w        #$1941,virusflag
  579.     move.l        #mes0,d2
  580.     move.l        #mes0length,d3
  581.     bsr.L        writer
  582.     rts
  583.  
  584. ***********************************************************
  585. *
  586. *    DASA is the Byte Warrior
  587. *
  588. *    DASA is always located at $7f800 and since
  589. *    it uses a direct jump for DoIO of kick V1.2
  590. *    ( jmp $fc06dc ) for his own copy-routines it
  591. *    crashes on kick v1.3.
  592. *    Therefore I have added this two way search, because
  593. *    when it's kick 1.3 it can't work but is still in
  594. *    memory and I don't like a virus in memory...
  595. *
  596. *        ONLY A DEAD VIRUS IS A GOOD VIRUS!!!!
  597. *
  598. ************************************************************
  599.  
  600. bytebandit:            ; Searches for byte bandit
  601.  
  602.     move.l        $4.w,a6
  603.     lea        350(a6),a0
  604.     lea        trddevice,a1    ; Searches first
  605.     jsr        findname(a6)    ; for trackdisk.device
  606.     move.l        d0,a0
  607.     sub.l        #28,a0        ; Now check for DoIO
  608.     move.l        a0,bb1
  609.     cmp.l        #$00f00000,a0
  610.     ble.s        bytebandit1    ; OK! DoIO is changed
  611.     rts
  612.  
  613. bytebandit1:
  614.     move.l        148(a6),a0    ; Now second test if it
  615.     cmp.l        #$00f00000,a0    ; is really byte bandit
  616.     ble.s        bytebandit2    ; LAMER also changes DoIO!
  617.     rts
  618.  
  619. bytebandit2:    ; it is byte bandit!!
  620.     move.l        a0,a4
  621.     add.l        #$10c,a0    ; Here the pointers are
  622.     move.l        (a0)+,a1    ; saved...
  623.     move.l        (a0),a2
  624.     move.l        bb1,a0
  625.     move.l        a1,(a0)        ; Restoring both
  626.     move.l        a2,148(a6)    ; pointers...
  627.  
  628.     moveq        #0,d0        ; Removing byte bandit
  629.     move.l        d0,550(a6)    ; as a resident module..
  630.     move.l        d0,554(a6)
  631.  
  632.     sub.l        #$2ca,a4    ; Its beginning
  633.     move.l        a4,a3        ;
  634.     add.l        #$400,a3    ; Its end
  635. bytebandit3:
  636.     move.l        d0,(a4)+    ; Deleting it
  637.     cmpa.l        a3,a4        ; from memory
  638.     ble.s        bytebandit3
  639.  
  640.     move.w        #$1941,virusflag
  641.     move.l        #mes10,d2
  642.     move.l        #mes10length,d3
  643.     bsr.L        writer
  644.     rts
  645.  
  646.  
  647. *************** M E S S A G E S  AND  D A T A S ****************
  648. even
  649. mes0:    dc.b $0a,' DANGER!!  BYTE - WARRIOR (DASA) VIRUS found!!'
  650.     dc.b $0a,'Virus killed, check your disks....'
  651.     dc.b $0a,$0a             
  652. mes0end:
  653. mes0length = mes0end-mes0
  654.  
  655. mes1:    dc.b $0a,$9b,'7;32;41m'
  656.     dc.b ' NO (SCA,DASA,Bbandit,Lamer,IRQ,BSG 9,Gadaffi,Disk-Doc.) VIRUS found!'   
  657.     dc.b $9b,'0;31;40m'
  658.     dc.b $0a,' ^^  read instructions [berserker ?] for more information..'
  659.     dc.b $0a,$0a
  660. mes1end:
  661. mes1length = mes1end-mes1
  662.  
  663. mes2:    dc.b $0a,' DANGER!!  BSG 9 LINK -  VIRUS found and killed!!!'                
  664.     dc.b $0a,'Check first prog. in startup seq. or look into devs.'
  665.     dc.b $0a,$0a
  666. mes2end:
  667. mes2length = mes2end-mes2
  668.  
  669. mes3:    dc.b $0a,' DANGER!!  IRQ LINK - VIRUS found and killed!!!'                
  670.     dc.b $0a,'Check 2nd prog. in startup seq. or cli-command DIR.'
  671.     dc.b $0a,$0a
  672. mes3end:
  673. mes3length = mes3end-mes3
  674.  
  675. mes4: dc.b $0a,' DANGER!!  GADAFFI - VIRUS found!!!'                
  676.     dc.b $0a,'Virus killed, check your disks....'
  677.     dc.b $0a,$0a
  678. mes4end:
  679. mes4length = mes4end-mes4
  680.  
  681. mes5:    dc.b $0a,' DANGER!!  SCA - VIRUS found!!!'                
  682.     dc.b $0a,'Virus killed, check your disks....'
  683.     dc.b $0a,$0a
  684. mes5end:
  685. mes5length = mes5end-mes5
  686.  
  687. mes6:    dc.b $0a,' DANGER!!  Disk-Doctor VIRUS found!!!'                
  688.     dc.b $0a,'Virus killed, check your disks....'
  689.     dc.b $0a,$0a
  690. mes6end:
  691. mes6length = mes6end-mes6
  692.  
  693. mes8:    dc.b $0a,' DANGER!!  MUTANT SCA - VIRUS found!!!'                
  694.     dc.b $0a,'Virus killed, check you disks....'
  695.     dc.b $0a,$0a
  696. mes8end:
  697. mes8length = mes8end-mes8
  698.  
  699. mes9:    dc.b $0a,' DANGER!!  EXTERMINATOR VIRUS (Lamer!) found!!!'                
  700.     dc.b $0a,'Virus killed, check you disks....'
  701.     dc.b $0a,$0a
  702. mes9end:
  703. mes9length = mes9end-mes9
  704.  
  705. mes10:    dc.b $0a,' DANGER!!  BYTE - BANDIT VIRUS found!!!'
  706.     dc.b $0a,'Virus killed, check you disks....'
  707.     dc.b $0a,$0a
  708. mes10end:
  709. mes10length = mes10end-mes10
  710.  
  711. mes11:
  712. dc.b $0c,$0a,$1b,'[1m','                       ***** BERSERKER III + *****'
  713. dc.b $1b,'[0m'
  714. dc.b    $0a
  715. dc.b $0a,'       1. This Viruskiller finds and destroys the following:'
  716. dc.b $0a,'          Byte Bandit Virus, Byte Warrior Virus (DASA)'
  717. dc.b $0a,'          SCA and SCA Mutants (AEK, LSD, OBELISK & WARHAWK)'
  718. dc.b $0a,'          Exterminator Virus (LAMER), GADAFFI Virus,'
  719. dc.b $0a,'          Disk-Doctor Virus, IRQ Virus (Link Virus),'
  720. dc.b $0a,'          BSG 9 VIRUS (Link Virus).'
  721. dc.b $0a,'       2. All bootblock viruses like SCA and mutants, BYTE BANDIT,'
  722. dc.b $0a,'          BYTE WARRIOR and EXTERMINATOR will be deleted from'
  723. dc.b $0a,'          memory and all system pointers will be restored.'
  724. dc.b $0a,'       3. The IRQ/BSG Viruses are only killed in memory. They'
  725. dc.b $0a,'          might have infected some prgs. on disk!!   Take care...'
  726. dc.b $0a,'       4. Berserker always corrects cold- and coolcapture....'
  727. dc.b $0a,'          Berserker works with more memory and all kickstarts.'
  728. dc.b $0a,'       5. Greetings to Thomas M., Thorsten H., Olaf B., Gunnar L.,'
  729. dc.b $0a,'          Henning L., Michael V., Dirk L. and Steve Tibbett....'
  730. dc.b    $0a
  731. dc.b $1b,'[1m'
  732. dc.b $0a,'            I LOVE MARTHA !!!      This program is in the PUBLIC DOMAIN!!!'
  733. dc.b $1b,'[3m'
  734. dc.b    $0a
  735. dc.b $0a,'                                 © Copyright 1988, 1989 by Ralf Thanner.'
  736. dc.b $1b,'[0m'
  737. dc.b $0a
  738. mes11end:
  739. mes11length = mes11end-mes11 ;
  740. even
  741.  diskdoc:    dc.l 0
  742.  diskdoc1:    dc.l 0
  743.  diskdoc2:    dc.l 0
  744.  gadaf:        dc.l 0
  745.  bb1:        dc.l 0
  746.  exter:        dc.l 0
  747.  exter1:    dc.l 0
  748.  outputhandle:     dc.l 0
  749.  dosbase:     dc.l 0 
  750.  IntBase:    dc.l 0
  751.  virusflag:    dc.w 0
  752. even
  753.  trddevice:    dc.b    'trackdisk.device',0
  754. even
  755.  IntName:     dc.b    'intuition.library',0
  756. even
  757.  dosname:    dc.b    'dos.library',0
  758. even
  759. alert1:    dc.w     178
  760.     dc.b     16
  761.     dc.b     'Berserker found VIRUS in memory!'
  762. even
  763.